-Roberto's bot support tips for Classic Bots-
I have written some tips that will help you bot support your own maps for Classic Bots. 

Important: 
-Before reading this guide, read "Lagg's Bot Tutorial.txt" from the "ClassicBots_Readme" folder. After you've read that and you got a general idea about how bots work, then you should come back and read this document. 

-To bot support maps for ClassicBots, you start the game with "ClassicBots_Offline.bat". Because the Map Editor GUI from ClassicBots has many addons and tweaks that you'll read about next.



[-------------General bot support info-------------]

-Always remove water/lava and forcefields from a mission before building the navigation graph, because no "jet up" paths will be built in water. If a map has solid forcefields and paths are built through them, you need to temporarily place a solid object to block the paths from being built there (so bots know they can't go there) while you're editing the navigation graph, or you can just remove the no-pass forcefield completely as an alternative. You could simply make two copies of a map, one used for navgraph building and one that's the final map. In the map you'd use just for building the navgraph you could remove the water and forcefields from there, block places where bots shouldn't go, or add extra inventories so more nodes are places in some areas. 

In maps with a lot of water or land between the flags, raise the weight to 3900 for all driving objectives and add more vehicle objectives near the vpad with the same weight. Also raise the second weight field to 3900 for no-passenger vehicles. After that, raise the weight for all the important DefendLocation, DefensePatrol, DeployEquipment, and RepairObject objectives from the bot's homebase to 3975. This is so that bots still do objectives near their base instead of always doing the high-priority vehicle objectives and flying away. This also means you have to remove a lot of non-important bot objectives near the homebase so that they have time to drive, too.

If the vehicle station is really important to the current mission, because the map might have a lot of water or land between the flags, add the invincible datafield to the vpad object and set it to true so that it can't be destroyed. Then in the .mis file after the MISSION STRING BEGIN line, explain that the object is invincible in the current mission. If you set any object to be invincible, then you must remove all attack, defend, and destroy objectives related to that object. You can do this for any object that you consider crucial for the mission, not just the vpad.

-In LAK Rabbit, Hunters, and Deathmatch maps, you must remember that everyone ONLY USES Team1 spawnspheres, even if you have Team2 spawnspheres in the mission. Therefore, you must either make a big central spawnsphere to cover the important areas of the map, or place many small spawnspheres for Team1 all over the map. This is especially important in LAK Rabbit because rabbit bots only run towards spawnpoints inside spawnspheres, so they must have a big spawnsphere/many small spawnspheres to randomly run all over the map as opposed to preffering one area. In LAK, you do spawn at Team1 spawnspheres but if there's someone holding the flag, you always spawn somewhere near him. In Team Hunters 2, you must add Team2 spawnspheres too. If a map has Hunters and Team Hunters available, you could use this approach to make spawnspheres: Assuming that you have a big central Team1 spawnsphere in Hunters, for Team Hunters you could add a bunch (or just a big one) of smaller Team2 spawnspheres that are close to each other inside that bigger Team1 spawnsphere. This will make Team2 players have a higher chance of spawning close to each other, while also not spawning far from Team1. Or, if you don't have a big central spawnsphere, you could just copy Team1 spawnspheres to Team2, so all players have the same chances to spawn everywhere. Two: If your map has only Team Hunters available, you could make spawnspheres for Team1 and Team2 all at different locations just like in CTF, CNH, Siege, etc, since you don't care about Team1 spawning all over the map.

-Do not set a Camping Defend Location objective to offensive and defensive, set it only to offense. Try not messing with these two things, the in game editor that came with this pack already has these set properly in all objectives.

-Remember that by default $Host::AdaptiveCTFBots is set to true in the serverPrefs.cs file. This will make bots that have humans in their team focus a bit less on deploying turrets, defending their flag, or chasing the enemy flag carrier IF the enemy team is full of bots, depending on how better the human team performs. When editing and testing if the bots deploy objectives or not, you may want to temporarily set this to false so that the bots always have the same weight no matter how well the human team performs.

-Only add one TxPatrolPathx simgroup per Defense Patrol objective, so if you have two defense patrol objectives then add two simgroups. Only specify a single path number that you want the bot to use in the AIObjective details.

-Important: Bots will not do DefendLocation or DefensePatrol objectives IF the object has no power in that simgroup, either because there's no generator in the simgroup or the generator is destroyed. This means that even if the bot has a flag in the 'targetObject' field, if there's no power in the flag's simgroup, the bot will not do that objective. To fix this move the flag in a simgroup that's powered (has generators). Remember, this applies to any object, not just a flag.

-By adding an object name in the field "targetObject" in DefendLocation or DefensePatrol objectives, bots will have a higher priority to do the objective if that object is enabled. If the object is disabled (destroyed by someone) the weight will decrease by -320. This is pretty useful in siege or for objects that really have no need to be defended after being destroyed. If the object that needs to be defended is a flag the priority won't be decreased because it's not treated as disabled. Some of the objectives from my editorgui have "NAME OF OBJECT" written in the targetObject field, so write an object name there. Some objectives don't have anything in the targetObject field, so they will always be done with the same priority. Look at the targetObject field in defend/defensepatrol objectives and see which of these objectives do you think need a targetobject. 

-When you make paths for the bomber or havoc, there are some extra things to remember, because they are tricky vehicles. The marker with the waitTime datafield (where driver bots wait) must not be too high above the ground or else the bots will keep rotating/flying around trying to maintain a stable position at that point. The first marker in the path will make the bot driver jet up if the vehicle is 4m bellow the marker. However, the vehicle will not jet up if it would hit the ground when heading to this first marker, you must raise the marker height yourself to make the bot jet up. This is because if the vehicle station has a ceiling, we don't want him to jet up into it right from the first marker. If the vehicle station has a ceiling, leave this marker just very slightly above the vpad (so the bot can see it) and move it outside the vpad building. This first marker in the path will also make the driver use it's slowest flying speed. The markers after the first one will make the bot not only jet up if he's 4m bellow that marker, but also if he would hit obstacles bellow, such as the ground/terrain/etc. The bot will automatically avoid hitting the ground after reaching the first marker in the path, so use this to lead the bot above rough/steep terrain. The marker that has the "waitTime" datafield will make the bots behave even more differently. The bots will try to not be bellow the waitTime marker at all, but always above. And if they are very close to the waitTime marker, they will stop trying to avoid hitting the ground so much and focus on stopping their speed instead, so place the waitTime marker not too high above the ground. Another important thing to remember is that the speeds for the bomber, havoc, and tank before and when they fly to the waitTime marker are set automatically and cannot be changed by the "speed" datafield. You can only change the "speed" datafield for these vehicles after they're done waiting for passengers.

-StandLocations and SpamLocations are used for destroying an object with a mortar from a difficult angle. You don't need team specific simgroups for this in CTF. You must add markers for each of these. In the marker details from StandLocations you must make a field called "targetObject" and give it the name of the object you want to be destroyed. In the SpamLocations you must make another marker with the same targetObject and objectname so they are associated. The bot will stand at the StandLocations and shoot his mortar until the object is destroyed or runs out of ammo, this can also be usefull for wall bounce mortars. Remember to put the marker from SpamLocations a bit higher, or the bot will aim too low, because the bot aims exactly where the marker is. My modified objective builder should make these simgroups automatically when you build bot objectives.

-Add the T1AttackPathx and T2AttackPathx simgroups if you have any AIOAttackObjective. These will be attack paths for destroying the objects, and they should be mostly used for destroying the generators. So only make attack paths if you have any AIOAttackObjective in your map. Don't make bots take isolated paths since that will make the map feel empty, but just make it so that they can can diversify their routes to the target object once they're close to the enemy base. Place the last marker in this path about 50m close to the target object or else the bot will start the path all over again. IMPORTANT: The first marker in this path should not be placed close to the bot's home base. By default he will take a path if he's aprox 200m away from the objective's target object, and if the bot is assigned the path when he's already in a 300m range of the target object, the bot will start the path from the last marker. So if the bot is assigned the objective when he's not in a 300m range of the target object, he'd go to the first marker in the path. And we wouldn't want the bot to go to the first marker in that path if it would lead him very far away from the target object. We'd want the first marker to be at least 350m to 500m close to the target object so the bot wouldn't start the path from a point that's very far from the target object. And remember that each objective can have specific paths allowed in them. So if you want a bot to only take paths 2 and 3 for one specific objective and only path 1 in another objective, you'd specify the path numbers in the "Paths" datafield in the objective, separated by a single space, and the bot will pick a random path number from there. For an example on how to do these paths look at my Katabatic [b] map.

-In CTF you must add simgroups like TxPathToFlagY. These are paths that capper bots will take so they can reach the enemy flag. So only make these paths for the CTF gametype. Don't make bots take isolated paths since that will make the map feel empty, but just make it so that they can can diversify their routes to the target object once they're close to the enemy base. Place the last marker in this path about 50m close to the target object or else the bot will start the path all over again. IMPORTANT: The first marker in this path should not be placed close to the bot's home base. By default he will take a path if he's aprox 200m away from the objective's target object, and if the bot is assigned the path when he's already in a 300m range of the target object, the bot will start the path from the last marker. So if the bot is assigned the objective when he's not in a 300m range of the target object, he'd go to the first marker in the path. And we wouldn't want the bot to go to the first marker in that path if it would lead him very far away from the target object. We'd want the first marker to be at least 350m to 500m close to the target object so the bot wouldn't start the path from a point that's very far from the target object. And remember that each objective can have specific paths allowed in them. So if you want a bot to only take paths 2 and 3 for one specific objective and only path 1 in another objective, you'd specify the path numbers in the "Paths" datafield in the objective, separated by a single space, and the bot will pick a random path number from there. For an example on how to do these paths look at my Katabatic [b] map.

-Don't give second weights to objectives like piloting bombers, gunships, deploying MPBs, piloting tanks. If you have only one driving/flying path for an objective that has two weights and two bots are assigned that objective, then they will wait in the same location for passengers and bump each other and crash. So if you wanna have two (or more) tank/bomber/gunship/MPB objectives per team, give them at least two driving paths with diferent waiting locations for passengers. 

-The AIObjective location of a Missile Target object should be lower than the actual object, about -0.5 to -0.75 lower. This will force the bot to move up on a hill so he can properly see the missile and shoot, else the missile lock may fail. Modify this objective's location in a way that would make the bot move on higher ground to see the object, but don't place this objective inside terrains, objectives, etc. It should be visible. I have modified the objective builder to position these objectives a bit lower so you rarely have to mess with this.

-Place all the driving/flying objectives for bots near their vehicle stations in a max range of 15m or else the bots will ignore those objectives. You can make two vehicle stations that are very close each have different AI pilot objectives for them if you place the AI objectives more than 15m away frm a vehicle station but 15m close to the other. You can add datafields to the markers in a path for pilots/drivers. The "speed" field will make bots go slower (duh). Input something from 0 to 1, 1 is full speed. The next datafield is 'waitTime.' Place this only one time in the marker where you want bots to wait for passengers. You can, if you need to, add some markers that lead to the waitTime marker, so it's not required that the first marker in the path is a waitTime marker. On the marker with the waitTime datafield, you need to input a value so the bot knows how long to wait for passengers. As an example, 45000 would be 45 seconds. Don't bother setting up the "speed" datafield in a markers that lead up to a marker with a "waitTime" datafield or a marker that has a "waitTime" datafield when it comes to bombers, havocs, or tanks. They will use predefined speed values when it comes to moving to waiting spots. You can change the "speed" afterwards though.

-In maps with shrikes, make a simgroup called MissileRun. Add markers in it near the corners of the map (even further, outside the mission area), and place them very high. The shrikes will fly away from missiles towards those markers. My modified editorgui (taken from Lagg) will make this simgroup automatically if you add a shrike objective.

-In CTF you must also add a new simgroup called "ChaserBoostPoints", place markers in there to help bots still move fast when they don't see the enemy flag carrier. For example, if there is a big hill or base in the middle of the map and the bot can't see the player because of that base or that hill, it's good to place a marker visible to the bot on top of the hill, to it's left, or it's right. In this way even if he can't see the player he will at least move to that marker close to the player before getting a better view. So place these in visible spots where the bots would fly to get a better view, like top of the hills, sides of bases. Don't place too many, it consumes quite a bit of CPU power. Enable/disable this from "$AISuperChaseSpeed" in the file LaggsDefault5_ai.cs. The bots will only chase human targets with high speeds, bot targets will be chased normally. My modified objective builder should make this simgroup automatically when you build bot objectives.

-In CTF you must add a new simgroup called "CapperBoostPoints". When a bot can't see the flag he will move at normal speed. By placing markers in the CapperBoostPoints simgroup you will make the bot move at fast speeds towards those markers if that will get him faster to the flag. Don't add too many of these since it consumes a bit of cpu power, but add enough so that the bot can see a marker before he can see his home base. Don't place it at ground level or too high and also try to make it a straight-ish path. My modified objective builder should make this simgroup automatically when you build bot objectives.

-You now have a "genNear" field in the TouchObjective for grabbing the enemy flag (the ones with the mode "FlagGrab"). Only in those objectives you must set this to true (1) if there's a generator in the range of 150m close to that enemy flag. By default bots rarely stay on the AttackObject objective if they can also grab the flag, by setting this to true cloaker and heavy bots will ignore grabbing the flag and try to destroy the generator instead if they have a gen attack objective. Again, this is only available in the touchobjectives with the "FlagGrab" mode, so it's only for CTF use.

-In CTF you can add the variable AI_GensDestStartDefending right to a .mis file that uses these bots. You can add it right at the beginning after the CTF_scoreLimit field, or somewhere in there. If you do not set a value AI_GensDestStartDefending will be defaulted to 8. If a team has two generators and the AI_GensDestStartDefending (from the .mis file) is set to 8, then it would take 4 full destruction of both those gens so bots can do BaseRape DefPatrol objectives. If a team only has one generator I would set the AI_GensDestStartDefending to something like 4. So if that gen is destroyed 4 times bots will start paying more attention to defending it. You can add these objectives from my modified editorgui, it's called "BaseRape DefPatrol". It's basically DefensePatrol but with an additional value, urgentGenDefender set to true. This will allow bots to only run this objective when gens have been destroyed enough times. Anti base rape! Sort of.

Add teleporters in order in a map so they are linked. Setting "oneway" to true in a teleporter will make you unable to step in that teleporter. You can teleport to oneway teleporters, but you cannot teleport FROM them. Do add destroy, attack, repair, and defend bot objectives for teleporters if they aren't added and the teleporters are destructible. The bots will only use teleporters that are on their team, so Team 0 teleporters will not be used by the bots.

If your difference in height between flying vehicle markers on a path is too high the bots will stop to gain energy and then continue. This can be a problem if they are near an enemy base because this exposes them to danger, especially bombers since they often need to fly high. To avoid this don't place a marker that's higher in air than the previous marker, place it at a slightly lower height. If you really need to gain altitude do it outside the enemy area. 

Lagg's V5 bots will automatically, without any need for extra objectives, jump in a abandoned ground vehicle about 250m close to them WHEN they have the enemy flag and they are far from their own home flag, to vehicle cap. They will not use a path, they will just drive towards their base and avoid obstacles. They will steal land vehicles and flying vehicles, if possible. Only add Steal a Ride objectives if you want them to use specific paths and wait for a passenger to come.

The Steal A Ride objective, or Vehicle Steal as I named it in my modified editorgui, will make a bot search for abandoned FLYING vehicles only to steal around that objective, hop in, and wait for a teammate passenger before using a path to head home. If he has the flag he will directly drive home, else he will wait for passengers at the marker with the datafield "waitTime". waitTime needs a value, for ex. 30000, that will make him wait 30 seconds. Only add waitTime once in a path, and only add it if you want the bot to wait.  This objective will use TxCapPathy simgroups where x is the team and y is the path number (from 1 and above). Again, this CapPath and Steal A Ride objective is only for flying vehicles, so keep that in mind when adding markers. For ground vehicles, or sometimes flying vehicles, bot will cap even without a path automatically. Note: To prevent heavies from getting in vehicles the "FLAG" mode in the objective must be set to true. By default I have set it to true in the editorgui so only light/medium armors use it.

You can place inside and outside TRIGGERS then use the "inBase" tag if you need to know if a bot is in base. In non-siege gametypes such as CTF or DND, the bots will gain extra weight for objectives that have the inBase field set to TRUE, if the bots entered the enemy's base. I recommend only adding inside/outside triggers in CTF/DND for big or medium bases. In siege, they will not only gain weight bonuses if an object's inBase and a bot's inBase, but also get weight reductions if an AIObjective is inBase and the bot is NOT inBase, or an AIObjective is inRoom and the bot's NOT inRoom. Setting an objective's inRoom/inBase field to false is the same thing as leaving the field empty, it will not affect the weights.  Also in siege, there's also the deathTrigger that kills Defense bots for entering Offense team's areas, and mpbTrigger to stop MPBs from deploying there, or messageTrigger to display a message upon entering an area, or inRoomTrigger for when you're inside the switch room. There's also KillBotTrigger to kill bots when stepping in an area, and dangerTrigger/safeTrigger to toggle bots walking slower or faster for some objectives when they might be in a dangerous area such as above lava. 

Place the AIOAttack, destroy, and mortar destroy objects where you want the bot to stand and attack the objects. Don't place them too close to the object. If the object that needs to be destroyed is in a very tight room then use 'Blaster AttackTarget' objectives instead. If you don't want or need bots use attack paths, you must use an AIODestroyObject instead of the AIOAttackObject. For this, use 'Blaster Destroy', found in the editorgui.

If you have generators (or other objects) that bots need to stand very close to them to destroy them (the room is very tight), then you must use the "Blaster AttackTarget" from my Editorgui to make the bot properly attack the generator (or object) with the blaster. This objective has "Blaster Plasma PlasmaAmmo" in the "equipment" field and 'randomSet' in the 'buyEquipmentSet'. By default bots only attack gens from more than a 7m distance so they don't kill themselves from splash damage, I have modified it so bots can attack from any distance with a Blaster. If your map uses Gunships to transport bots to generators in tight rooms then don't forget to use the objective "PilotGunship GetBlaster" from my Editorgui, objective's 'equipment' field so the pilot and his escorts get blasters. I have made it so that gunship passenger bots will get a blaster if the NeedARide objective has "Blaster Plasma PlasmaAmmo" in the equipment field. Remember that these Blaster Attack objectives require TxAttackPath simgroups in the mission just like the normal Attack objectives. If you don't want or need bots use attack paths, you must use an AIODestroyObject instead of the AIOAttackObject. For this, use 'Blaster Destroy', found in the editorgui

In places where bots keep getting stuck add some DumbBOT triggers. The trigger must have a dynamic field called setPosition. When a bot enters that trigger, his position will be set to the "setPosition" value. 

Only point up AIODeployEquipment objectives slightly, not too much. In most cases, especially outside, bots will not deploy inventories or outdoor turrets if the deploy objectives are rotated too much on the X axis. And to make sure they deploy them, raise the objectives slightly above the ground so their middle is above the ground.

Remove missile and attack objectives from turrets and sensors that are placed very very high (like the Katabatic Sensors). The bots will have a hard time finding a proper location to stand and attack them. Let shrikes take care of those objects, if the map has them. Or add some destroy/mdestroy/attack objectives to replace the mortar/missile ones, if bots can have a good location to stand on while shooting.

The AIOMAttackLocation, has two modes, using a mortar or the laser rifle, it will spam enemies close to the location of where you put this objective. I named it MortarSpam Location or Snipe Attack location in my editorgui. You should put these almost at ground level because the bots will move to a greater height on the map in order to be able to see the objectives, and this is a good thing since we want the bot to sit on some hill to snipe or mortar stuff. 

Bots should destroy turrets before gens, inventories, vehicle pads etc. Even before getting vehicles. Turrets are completely stopping bots from doing attack tasks or capping flags, because bots are dumb and can't dodge them. Remember this when modifying weights. This is also a reason for why you'll see so many bots using the sensorjammer.

The vehicle AIObjectives, like AIONeedARide, AIOPilotShrike, etc. have a "Paths" datafield. The paths are numbers separated by a single space. As an example, we'll say that we have something like "2 9 4". From here, we know that there are 9 paths in total, but the bot can only randomly pick a path that's either 2, 9, or 4, and not the rest of the paths. So in this case if the random number is 9 and a bot in team 1 pilots a shrike, the path taken will be T1ShrikePath9. If you want to have two or three bomber, tank, or havoc bots pilot at the same time, then you must remember to write different paths in each objective. So if you have two AIONeedARide objectives, one could use the paths "1 2" and the other one could use "3 4 5" as an example. And in paths "1 2" you'd set a different waiting location than the "3 4 5" paths, so the bots don't wait at the same spot and bump into each other. You can also write a single path name in the "Paths" field and the bot will only take that specific path for that AI Objective. Another important thing to remember is to place the AI objectives in a maximum range of 15m of their respective vehicle stations or else bots will not do that objective. Also good to know, a bot will only do vehicle objectives in the first place if they're in a 300m range of a vehicle station. In maps with multiple vehicle stations, don't make an AI objective use paths that are designed for some other vehicle station, you need to write specific paths in this case.

An important thing to remember is that in any DefensePatrol objective, you can only write a single specific path in the "Path" field there, unlike the vehicle objectives. So if you want a bot to use more DefensePatrol paths, you need to add another DefensePatrol objective. Also, in CnH, the targetObject datafield is required to have a value so that the bot will only do that objective if the targetObject is from the same team.

Do not overload the bots with objectives. That doesn't mean that you don't need to give them stuff to do, but only put things that you want to actually see them do. You can place four defending locations objectives at random objects, but you don't want to see 4 bots standing around nowhere and doing nothing. You want them to do the important things. Same with weights, think before modifying weights or else they will not do the most important things.

In CTF, when making a bomber or tank path don't add too many markers after the bomber has completed a run over the enemy base/VPAD or the tank reached it's destination. The reason is that if the pilots don't have gunners they should exit as soon as they reached their destination instead of mindlessly driving without a gunner. And if they do have a gunner, they will repeat the path from the last two markers. So try making the last two markers the points where they repeat a bombing run above enemy assets or where you want the tank to keep attacking stuff. In siege they will jump off as soon as the path is completed, so you can add a few more markers there where you want them to patrol. This is because they need to complete other objectives too. 

You can type "randomSet" in the buyEquipmentSet for the AIObjective so the bot can get a random inventory set (that will be suitable for that objective) in the objectives. This is only available for the objectives: AttackObject, DefensePatrol, DestroyObject. I have modified DestroyObject so cloakers and sensor jamming bots get a higher random set priority.

If you use my editorgui all the deploy objectives will have a GenDefend field, meant for CTF only. If you set that to true (1) in a deploy objective then the bots will only deploy that AFTER their gen was destroyed. If team 2 destroys team's 1 generator then team 1 will deploy these GenDefend objectives. They will only redeploy them again after their generator gets destroyed again. This is useful in CTF because it frees up bots of unnecessary tasks, if no one is going to destroy the generator it's useless to defend it. Just focus on capturing the flag and other stuff first.

In my editorgui when you add a "EmergencyFlagDefense Patrol" or a "Defend Location" objective it will have a datafield called "ctfEmergency". EmergencyFlagDefense Patrol has ctfEmergency set to true by default. Also, the flag defending objectives that are created when you build the objectives have this field. If you set that to true (1) then when that team which has the objective almost loses they will do this objective. Else if they are not losing badly they will not do the EmergencyFlagDefense Patrol objective.  I'd place the markers in the path for EmergencyFlagDefense Patrol very close to the flag or entrances so it makes it difficult for enemy cappers to get the flag. In addition to this the bots have increased missile object priority if they are losing, that is automatic. But remember that "EmergencyFlagDefense Patrol" is a DefensePatrol objective so you can only have one path per objective. In the field "path" you can only input one specific path. Another Defense Patrol objective in the editorgui is "FlagDefense Patrol", which runs all the time not just when losing, because in there ctfEmergency is off.

Attack, Destroy, MDestroy objectives have a field (if you build objectives with this objective builder) called "isDisabled". If you write an object name in that field the bots will only continue these attack objectives if that object is disabled, else they will not do the objective. This is useful when you want to attack a generator that's protected by forcefields, but you can't because you need to destroy the force field generator first.

Make use of the 'TXDivertLocations' simgroup (replace X with the team number). There are maps like Titan where the bots will use the shortest path to the objective, as always, and maybe we prefer them not to do that. Making all the bots take the main tunnel through the hills in Titan will only make them create a war in the tunnels. What we want to do is to make them mostly avoid the tunnel in objectives with high weights. By adding markers for each team in the simgroup TXDivertLocations, you will make bots that have AttackObject, MissileObject, MortarSpam location objectives alter their paths when doing these tasks. Let's say that for Team 1 there's a 800m distance towards a turret a bot wants to destroy. If the bot finds a marker in T1DivertLocations to be closer to the turret than he is, and he is far from the turret (325m+) he will go towards the marker first, even if it may not be the shortest route. So create those Simgroups when you want to spread the bots around. Add about 4 markers per simgroup (max 1 simgroup per team). Two markers should be to the left, two to the right of the map. The first marker of a direction should be the beginning of the deviation, the second is the point where the bot even if he wants to go back he won't because it will take too much time. Add the first marker close to the bot's spawn point. If you do not add, or you remove this simgroup, the bots will use the shortest route as usual. They are not required. Look at my Titan map to see how I added the TXDivertLocations paths and markers.

In CTF, remember to not place defend objectives further than 400m from an inventory station and defense patrol objectives further than 200m. The bots will ignore these objectives if they are over this distance, so don't place these too far from their home base. Place them in places that they usually go to. Also, where an object needs repair make sure there's a spawn sphere not further than 150m from it. Bots will only repair objects that are 175m close to them, so if they never spawn near the object with a max distance of 165mm they will rarely repair the objects. These checks were necessary in CTF because the bots sometimes decided to repair/defend an object that was too far away, and they would go all the way back.

Try to add at least 3 markers in any vehicle/attack/pathtoflag simgroup, so the bots properly use those paths.

When a CTF map only has one generator and that generator is pretty important don't forget to copy and paste it's repair objective so you have more bots repairing it. 2 repair objectives should be enough.

In very small maps copy and paste the objective for grabing the enemy flag for each team, and the objective for attacking the enemy flag carrier. Also add another sniper bot and flag defending bot. Since the bots don't have much to do they should pay more attention to the flag. 

Note: I modified the objective builder to automatically add some of the previous objectives that you've read about in this document and also some paths in order to save time/not have to remember everything. So check out the missiongroup and the AI objectives (after you build them) to see what exists before adding new objectives and paths. Also, some paths are gonna be added automatically when you add an objective from the (modified) Editorgui.


[-------------Metadrax's bot support tips-------------]

Here are some more quick and useful tips from MetaDrax for editing or adding bot support to maps:

- No spaces in map file names
- Alt select an object/objective to rotate
- 1 0 0 0 = North, 0 0 1 180 = South
- Create bot NAV, then LOS, then save and exit the game.
- Create Spawn then save.
- Make sure CNH and CTF have repair packs at bases
- Make sure repair weights are higher for faster repairs due to priority
- Equipment = required for objective, Desired Equipment = optional
- Bombers will stop to gain energy if a marker if placed too high, don't place them too high above enemy bases
- Recalescence base will UE if spawn spheres are used in octagon shaped hallways, use Fumarole as solution
- Scarabrae base cannot support NAV; Worldcraft used to build placeholder base and draw NAV, bots don't see interiors


[-------------Siege Editing-------------]

For Classic Bots, I have added more options for better bot support that will be especially useful in Siege, but also in CTF, and eliminates the need of extra scripting. Please read this carefully to understand how it works. -Roberto

What makes Siege against bots fun? The variance of objectives and the number of objectives required to win. Lagg's maps ussually have Entrance Forcefields that stop you from entering the Defense's base. Near the Entrance forcefields some maps have a forward spawn that can be captured by the Offense, which makes the Defense team spawn deep inside the base and the Offense team near the captured Switch. Guarding the Entrance Forcefields there are some turrets, so you can either destroy them to have an easy time with the Entrance Forcefields or have a harder time while ignoring the turrets. Then once you destroy the Entrance Forcefields there are the Inner Base Forcefields, which prevent you from going to important sides of the Defense's base or destroying the Objective Forcefield. In the base, there are also the Base Power Generators, which if you destroy you'll have a much easier time wrecking the Defense's bas, but it's not required to destroy them. Once you destroy the Inner Base Forcefields, all that's preventing you from touching the switch is the Objective Forcefield. Once you destroy that it's game over! On top of all of these objectives you might do things a bit differently, depending on the map. In some maps destroying the vpad could be very important, or the Offense could capture a switch that also gives them control of a base or sentry turret, or the Defense or Offense could repair some already destroyed assets that would really help them in the mission. The lesson to remember is that there should be quite a number of required objectives that make the map not end so easily, and that there should also be a number of optional objectives which could ease gameplay for one team and make it harder for the other. And if possible, make each required objective require different tactics than the one before it. Just as an example, if you have Entrance Forcefields on two sides of the map, one side could have some sentry turrets guard the gens while the other side could have some forcefields around it and be closer to the Defense's spawn, filling the area with the Defense players. Note: Siege games can be too short if you only have one Objective Generator and one Entrance Generator. To make the game last a bit, place two entrance gens in separate places at a distance, same with the objective generator (you should name it Reserve Objective Generator or something like that).

Add isEnabled, isDisabled, isSameTeam datafields to objectives that support this feature in case they are not added automatically. Important: if you reenter the mission, the fields will disappear so you have to write them again if you wanna use them. If any of these fields are not present at all in the .mis file or the names themselves are present but the values are blank (a single space in the value), then they will be treated as false. So the objective will run as usual if you build your bot objectives and leave these fields alone. You only have to mess with these if you think it's necessary to change objective priorities or stop objectives in specific situations. Otherwise, do not bother changing these fields and everything will work as usual! 

The following objectives support the "isDisabled, isEnabled, isSameTeam" datafields feature:

"Attack Object, Destroy Object, Mortar Destroy Object, Mortar/Sniper Attack Location, Repair Object, Defend Location, Defense Patrol, Deploy Equipment, Place Camera, Touch Object, and all the 6 piloting objectives."

What do they do? Here's the answer:

-isDisabled
	If object names are written here (separated by space) and ALL of those objects are disabled, the bot will do the objective, otherwise not. Max 8 objects.
-isEnabled
	If object names are written here (separated by space) and ALL of those objects are enabled, the bot will do the objective, otherwise not.  Max 8 objects.
-isSameTeam
	If object names are written here (separated by space) and ALL of those objects are in the same team as the bot, the bot will do the objective, otherwise not.  Max 8 objects.

Important: In the fields above, disabled refers to objects that are destroyed. You can also write simgroup names in 'isDisabled' and 'isEnabled.' So for example, if two simgroup names exist in 'isDisabled,' only when those two simgroups are out of power (both being unable to provide power to assets) is when the bots will do the objective. So do name your simgroups properly if you wanna use this feature.

Notes: 
-You can write something in all the fields if you want to, you don't have to only use one of the fields above. Though remember, if one field above turns out false, it doesn't matter if the other fields turn true because the bot will not do the objective. For example, if isDisabled allows the bot to attack something because the object in that field is indeed disabled, if you wrote something in isEnabled and the object from there is not enabled, the bot will not do the task. In simpler words, the bot evaluates all of those fields and if one condition prevents him from doing anything, then he'll not do the objective. 

-For Missile Object and AIO Mortar Object, I added checks so that in CTF/DND/SIEGE they only missile/mortar objects (like in the field turrets, sensors) if bots are not in base. inBase refers to the defensive team's base in siege and in other gametypes it refers to the opposite team's base. You need to add the inside/outside zone triggers for this to work.

-- Zone triggers --
I also made Lagg's zone triggers work in Siege, CTF, and DND, as long as you add the actual triggers in the map. In other gametypes, even if you do set up the zone triggers, everything will work as usual and zone triggers won't affect anything. Before you build the bot objectives, you should click an asset and set its inBase or inRoom fields to true or false from there. Because in that way the objective builder will also add those fields to all the bot objectives for that object. Otherwise the bot objective inBase and inRoom fields will be an empty string and the weights will work as usual. Bellow you'll see the explanation.

-- inRoomTrigger turns inRoom on -- outsideRoomTrigger turns inRoom off --
-- insideTrigger turns inBase on -- outsideTrigger turns inBase AND inRoom off --
-- dangerTrigger turns inDanger on -- safeTrigger turns inDanger trigger off --


"Attack Object, Destroy Object, Mortar Destroy Object, Mortar/Sniper Attack Location, Repair Object, Defend Location, Defense Patrol, Deploy Equipment, Place Camera, Touch Object." These were the objectives that have the fields "inBase," "inRoom" added to them. So these objectives are allowed these zone weight modifiers. 

If in an AIObjective you set inBase or inRoom to true (1), the bot will know that the location of that objective is inside a base or the switch room in siege. So whenever the bot will be inBase like an inBase objective, he will have increased priority to do that objective. Or in siege, if the bot's outside the base and the objective is inBase, he will have reduced priority to do that objective. Setting an objective's inRoom/inBase field to false is the same thing as leaving the field empty, it will not affect the weights. 

inBase reffers to the defensive team base in siege and inRoom to the switch room in siege. Both the offensive and defensive teams will benefit from knowing if they're outside, inside, or in the switch room. 

In CTF and DnD, you need to specify the 'triggerTeam' for the trigger so the bot knows that he entered the enemy base, because 'inBase' refers to the enemy team here. I recommend only adding inside/outside triggers in CTF/DND for big or medium bases. You do NOT need to set the 'triggerTeam' field in siege as it's implied that inBase refers to attackers being in the defender's base. In CTF/DND, the bots will not have decreased weights for not being inBase if an objective's inBase, but if they are inBase and the objective's inBase, they will get higher weights. Also in CTF or DnD, only add 'insideTrigger' and 'outsideTrigger' since inRoom will be irrelevant. 

In siege, you might want to add some inside triggers through the defender's base on the floor to remind spawning bots that they are inside the base so they have increased or decreased weights for some objectives, such as defending or repairing objects that are inside or outside.



[-------------Easy step-by-step guide-------------]

Now that you've read all the information above, you can just use this step-by-step guide when bot supporting any map. You should refer to the more advanced information above whenever you need to, but this guide should be enough in most cases. It is written so that you can be efficient and at the same time avoid any problems.

The way I do it is, I printed all the steps below on paper. So, each step is a card. When I bot support a map, I keep putting these cards in as small box as I complete the steps below. When I complete all the steps and all the cards are in the box, the bot support for that map is done and then I can repeat the process for another map.

The really important thing is that you do these steps in order of their priority. First you do everything in Priority 1, then Priority 2, and so on. Each step has the gametype required at the beginning. If the step has the "All" gametype then you must do that step for all gametypes. If it's "CTF Siege DnD" then you must only do that step for those gametypes.


...dun...Dun... DUN...
   ---THE STEPS---


	Priority (1)
[All] - Set the Read-only tag to false for the current .mis and .spn files. Delete the .nav file if it comes with one. Add a _b tag at the end of these files. Look before the OBJECT WRITE BEGIN line and after the OBJECT WRITE END line in the .mis file to see if any custom/player-written scripts or functions are executed. If they're very simple scripts or functions that don't overwrite any original functions and are mostly just cosmetic, ignore them. If they overwrite important functions, then just delete the lines that are executing those scripts. If there are many scripts executed and you're unsure about how it affects the mod and the map is dependant on them, just look for another map to bot support.


	Priority (2)
[All] - Add the map name in prefs\EZ_Rotation.cs with the NONE gametype. Add the map in EZ_Rotation for all the other planned gametypes, too. On the MissionTypes line in the .mis file, add the NONE gametype there, too. 

[All] - Add the desired bots variable in the serverPrefs.cs file. Add Lagg's custom zones script before the OBJECT WRITE BEGIN line in the .mis file. Add Lagg's other custom scripts after OBJECT WRITE END in the .mis file. Add the [b] tag in the .mis file's DisplayName field. Add the bot support credits at the beginning of the .mis file. If you plan to add vehicles, raise the flightCeiling by about 75.

[CTF] Check if the score limit is too low and increase it if you want to.

[All] - If the map has multiple gametypes, for example LAK and Hunters, search in the .mis file for the datafield called missionTypesList. If you find any missionTypesList datafields, add the word NONE to their value so that you can see the objects when editing. If there are objects that shouldn't exist in other gametypes, for example a rabbit flag in hunters, add the datafield called missionTypesList to that object and in it only include the gametypes that object should exist in.


	Priority (3)
[CTF, CnH, Siege, DnD] - If a map has more than one of these gametypes, create a different mission for each gametype. To make things easier, finish the CTF version first if the map has it, then just copy that finished CTF map and go again through all the bot supporting steps but this time adapting it to the other desired gametype. It is better this way because you can customize the map and objectives depending on the gametype without problems.


	Priority (4)
[All] - Check the locations of all objects in the mission. Is the nexus, flag, or other object location too high for the bots to reach? Move them, if so.

[All] - Check if you need to add additional inventory stations to prevent bot overcrowding. 

[CTF, Siege, CnH, DnD] - Check if the repair packs are not too far from the base. If the assets are really important to the map, add additional repair packs near the bases. Every base, tower, or vstation needs to have a repair pack and spawnpoint at a max 150m distance near them so the bots can spawn there and fetch the pack.


	Priority (5)
[CTF, Siege, CnH, DnD] - Add a spawnsphere in isolated locations where bots usually don't go but have important things to repair there. The reason for this is that bots ignore repair objectives if the objects are more than 175m away from them. Also add repair packs if there are none around these bases/towers within a 150m range.

[LAK, Hunters, Deathmatch] - Make sure that Team1 spawnspheres cover the map.


	Priority (6)
[All] - If you added or modified the spawnspheres, re-build the spawngraph, save the mission, exit, and load it again. 


	Priority (7)
[CTF] - Check if the simgroups that have the flags in them provide power or if they have a generator in them. If not, for each of the two teams create a simgroup in their Team simgroup, and then set the new simgroup's providesPower datafield to true. Finally, move the flag there.

[CTF] - Add the variable AI_GensDestStartDefending somewhere near the CTF_scoreLimit field in the .mis file. A recommended value is: Number of gens in a team * 4.


	Priority (8)
[All] - Save the mission. Make a copy of the mission and add the _navBuild tag at the end of the copy's name. Remove the water, lava, forcefields from the _navBuild .mis file. 


	Priority (9)
[All] Open the _navBuild mission and build the navigation graph. Add inventories where navigation nodes don't exist, platforms where flying paths are not created, and place obstacles where bots shouldn't go. Keep rebuilding the _navGraph as you tweak the navigation nodes to see the changes until you think it's ready for the bots to use it. If the navigation nodes are placed really badly or not at all throughout the map, just look for another map to bot support.


	Priority (10)
[All] - Save the _navBuild mission and exit the game, then delete the new .nav file that it created. This is because we'll soon make a copy of the .mis file where you'll remove any obstacles you placed before building the line of sight. 


	Priority (11)
[All] - Make a copy of the finished _navBuild version of the mission. Open the new copy and build the navgraph. After the navgraph was built, remove all the obstacles (placed by you) that block the bot line of sight. Now build the line of sight, save the mission, and exit the game. You can now use the new .nav file that it created as the main .nav file, so rename the newly created navigation file to the same name as your .mis and .spn file. 


	Priority (12)
[All] - Open the main mission file. 

[CTF, Siege, CnH, DnD] - Set the inBase and inRoom datafields to true for all destroyable objects that are in a base. Also set the aiCanMortar datafield to true for vpads that have enough space around them. Finally, save the mission. 


	Priority (13)
[CTF, CnH, DnD, Siege] - Build the bot objectives for Team 1 and Team 2 and save the mission.


	Priority (14)
[CnH, DnD] - Replace all the normal AttackObject objectives with the DestroyObject called AttackObject Replacement (from the editor gui) because we don't want bots to use paths in CnH or DnD. If the room with the targetObject is too tight and the bots don't have a 7m distance to shoot from, use Blaster Destroy objectives (from the editor gui) instead.

[CnH, DnD] - Remove all the AIOMAttackLocation objectives. Remove all the DivertLocation simgroups, if you have any.

[CnH, DnD, Siege] - Remove all DefensePatrol and DefendLocation objectives that have the ctfEmergency datafield set to true. Remove all the DefensePatrol objectives that have the urgentGenDefender datafield set to true. Remove all the DefensePatrol objectives that are named FlagDefense Patrol.

[CTF, DnD, CnH, Siege] - Check if some objects are too high to missile or mortar. If so, replace the MissileObject or MortarObject objectives with RandomSet Destroy objectives (from the editor gui).

[CTF, Siege] - Check if there are any AttackObject objectives. If there are and it's not needed for bots to follow a path, replace them with the DestroyObject named AttackObject Replacement (from the editor gui).

[CTF, Siege] - Check if there are any AttackObject objectives in rooms where bots don't have a 7m distance to shot the object from. Replace the normal AttackObject objective with a Blaster AttackTarget (from the editor gui) instead. If you don't want bots to use AttackPaths, use the Blaster Destroy (from the editor gui) objective instead. Replace the normal Pilot Gunship objective with PilotGunship Getblaster objective (from the editor gui) if you have any Blaster AttackTarget or Blaster Destroy objectives in your map. Also check for Destroy or MDestroy objectives in the same cramped rooms.

[CTF, Siege] - Check if there are any DestroyObject or MDestroyObject objectives in rooms where bots don't have a 7m distance to shot the object from and replace them with the Blaster Destroy (from the editor gui) objectives instead.


	Priority (15)
[CTF] - Add destroy, attack, repair objectives for Sparky's teleporters. Team 0 teleporters will not be used by bots.

[CTF, Siege, DnD, CnH] - Modify the positions of AttackObject, DestroyObject, MDestroyObject, DefendLocation, and Repair objectives so that bots have room to shoot or stand in better repairing, defending, or camping positions.

[CTF] - Modify the positions of the AIOMAttackLocation objectives. These need to be lifted just a bit above the ground so that objects or walls don't block a bot's view when looking at them from the ground. However, they don't need to be lifted too much or else the bots will have no reason to climb a hill and get a better view. The intention is to make the bot climb a tall place so that they can see and shoot anyone near the MAttackLocation objective. Place one more SniperAttack Location or MortarSpam Location objective (from the editor gui) near vehicle stations or other busy areas, if needed.

[CTF, Siege, CnH, DnD] - If there are only a few inventories near the bases or if some assets are really, really important, raise their repair weight by 100. 

[CTF, CnH, Siege] - For one or two generators, copy paste their repair objectives again. For one really important generator, copy paste its Repair objective 3 times and its attacking objectives one time. For many low priority generators, set their second repair weights to 3300, the same as the first weight.

[CTF] - If the mission is very small, for each team copy and paste the TouchObject objective with the FlagGrab mode and the AttackPlayer objective that has LightEnergyELF as the desiredEquipment.

[CnH] - Add Laser ObjectDefender objectives (from the editor gui) where needed. It is required to write the object name in the targetObject datafield. Don't place these more than 400m away from an inventory station.

[CTF] - Add the Laser MainFlagDefender objective (from the editorgui). If the mission doesn't have a vehicle station or is small, and the Laser SecondFlagDefender, too. Write the flag name in the targetObject datafield. Don't place these more than 400m away from an inventory station.

[Siege] - Add MortarSpam Location, SniperAttack Location, and Laser ObjectDefender objectives (from the editor gui) where needed. Do write the object name in the targetObject datafield in case you add a Laser ObjectDefender objective.


	Priority (16)
[CnH, DnD] - In all the DefendLocation and DefensePatrol objectives, write the object names in the targetObject datafield so that bots have decreased weight if the object is disabled or no weight if it's not from the same team. 

[CTF] - In the TouchObjective objectives with the FlagGrab mode, set the genNear field to true if there are any generators 150m close to that flag. 

[CTF, Siege, DnD, CnH] - Add the objectives for deploying turrets, sensors, inventories, and cameras. Add about 3 indoor turrets and 3 outdoor turrets, 2 cameras, 2 motion sensors, 2 pulse sensors. Outdoor turrets and inventories only need to be slightly rotated on the X axis, not too much. If it's an outdoor deployable inventory, it needs to be rotated even less on the X axis or the bot won't deploy it. In CnH, make bots deploy some objects only after capturing a switch by using the isSameTeam field. isSameTeam will check if objects written there are from the same team (captured).

[CTF] - Add more deploy objectives as a response for the generator getting destroyed. Add about 1 indoor turret near the generator, 2 outdoor turrets at the generator entrances, and 1 camera and motion sensor near the generator. You must set the GenDefend datafield to true for bots to deploy objects only after their generators were recently destroyed.


	Priority (17)
[CTF, CnH, DnD, Siege] - Add vehicle objectives. Create the vehicle path simgroups. The paths are named BomberPath, BikePath, ShrikePath, MPBPath, HAPCPath, TankPath. Path format = (Team)(PathName)(PathNumber1-10). Write the numbers of the paths that can be used for an objective in the paths datafield. Separate path numbers by a space. For an objective to be available, it must not be further than 15m from a vehicle pad. Make use of this restriction in maps with multiple vpads by distancing the vehicle objectives from each other so that each vpad has its own driving objectives. In CnH remember that bots keep changing teams, so near every vpad you must make copies of the first team's paths and add them to the second team too, and vice versa. 


	Priority (18)
[CTF, CnH, DnD, Siege] - In maps with a lot of water or land between the flags, raise the weight to 3900 for all driving objectives and add more vehicle objectives near the vpad with the same weight. Also raise the second weight field to 3900 for no-passenger vehicles. After that, raise the weight for all the important DefendLocation, DefensePatrol, DeployEquipment, and RepairObject objectives from the bot's homebase to 3975. This is so that bots still do objectives near their base instead of always doing the high-priority vehicle objectives and flying away. This also means you have to remove a lot of non-important bot objectives near the homebase so that they have time to drive, too.

[CTF, CnH, Siege] - If the vehicle station is really important to the current mission, because the map might have a lot of water or land between the flags, add the invincible datafield to the vpad object and set it to true so that it can't be destroyed. Then in the .mis file after the MISSION STRING BEGIN line, explain that the object is invincible in the current mission. If you set any object to be invincible, then you must remove all attack, defend, and destroy objectives related to that object. You can do this for any object that you consider crucial for the mission, not just the vpad.


	Priority (19)
[CTF, Siege, DnD, CnH] - Write strategic object and simgroup requirements in the isDisabled, isEnabled, and isSameTeam objective datafields for all the objectives that support them. Separate words by a space. If it's a simgroup, it will check for the entire simgroup power. If it's an object, it will check if it's destroyed. All requirements must be met for the bot to do the objective. Remember that bots will automatically not do Defend, Repair, or DefensePatrol objectives with a targetObject that's from the opposite team or attack objects from the same team, so don't worry about that. IsSameTeam should be used instead for other strategic purposes. isSameTeam only checks objects and not simgroups, too.


	Priority (20)
[CTF, CnH, DnD, Siege] - If the bots have a shrike pilot objective, add about 4 markers to the MissileRun simgroup. Place them at the edge of the map and very high in the sky, even outside the mission area if needed.

[CTF, CnH, DnD, Siege] - Add the path markers for the passenger vehicles that lead to the waiting location. Going towards the first marker, bots will jet up if they're 4m below the marker but will not jet up if they hit the ground. If the current marker is not the first or the waitTime marker, but is instead between them, bots will jet up if they'd hit the ground or are 4m below the current target marker. Add the waitTime datafield in the desired passenger-waiting location. Don't place the waitTime marker too high. Its value is usually 59000 for the HAPC and 50000 for everything else. Don't bother changing the speed datafield for the markers leading to the waitTime marker or the waitTime marker itself, as it won't work.


	Priority (21)
[CTF, CnH, DnD, Siege] - Now that the waiting location markers for the passenger vehicles are done, add the rest of the markers to their paths.  For bombers moving across an enemy base, keep markers at the same height so bots don't stop to gain energy above the enemy base. In CTF, remember that bots will loop their movement between the last two markers in a path if they have a gunner and jump out of the vehicle when they reach the end if they have no gunner. In siege, you need to manually add more markers so that bots fly longer.

[CTF, CnH, DnD, Siege] - Add the path markers for the no-passenger vehicles. If you need to, add the speed datafield where bots need to exit the base carefully with a value from 0.25 to 1. For wildcats going down a steep hill decrease the marker speed to 0.6, and for ascending a narrow path decrease it to 0.8. To make shrikes carefully exit a base, decrease the speed for the first marker to 0.5.


	Priority (22)
[CTF, Siege] - Add simgroups called AttackPath. In CTF, also add the simgroups called PathToFlag. Add at least 3 markers in each path. If the distance between Team1's base and Team2's base is 100%, place the first marker in these paths after at least 50% of the distance. Place the last marker at least 50m close to the desired targetObject.  Write the numbers of the paths that can be used in the paths datafield, found in the AttackObject and TouchObject objectives. Separate words by a space. Format = (Team)(PathName)(PathNumber1-10).

[CTF, Siege] Add the StandLocations and SpamLocations simgroups. Associate markers to each other by adding a targetObject datafield to them. Place markers in SpamLocations that simulate a real player's aim. Remember that you must aim higher because projectiles fall down. In CTF everyone can use these simgroups, but in Siege only the offense team will use them.

[CTF] - Place markers in the ChaserBoostPoints simgroup. Don't place them too high above the ground. Place them above hills or bases. 

[CTF] - Place markers in the CapperBoostPoints simgroup. Don't place them too high above the ground. A bot will only go towards a marker in this path if it's closer to the homeflag location than he is.

[CTF, CnH, Siege, DnD] - Create PatrolPath simgroups for the existing DefensePatrol objectives. Specify a single path only for each DefensePatrol objective in the map. Format = (Team)(PathName)(PathNumber1-10). Add markers to the PatrolPath simgroups. In Siege and DnD, place them near important areas and objects. In CnH, place them near the switches. In CTF, the DefensePatrol objectives named EMERGENCY FlagDefense Patrol and FlagDefense Patrol should have about 3 to 5 markers in them very close to the flag to block cappers. Also in CTF, the DefensePatrol objectives named BaseRape DefPatrol should have markers around the generator area. 

[CTF, Siege] - Add the DivertLocations simgroups. Format = (Team)(PathName). Max 1 simgroup per team. In CTF, add DivertLocations for both teams. In Siege, only add them for the Offense team. Only add DivertLocations if the bots spawn at least 325m away from the targetObject for AttackObject, MissileObject, and MAttackLocation objectives, and if you want them to spread through the map instead of picking the shortest route. Add about 4 markers in a simgroup, 2 markers to the left of the map and 2 to the right. Each of those 2 would lead closer to the targetObject. The bot will only go towards these markers if they're closer to the targetObject than he is.


	Priority (23)
[CTF, Siege, DnD] - Add the triggers: inRoomTrigger, outsideRoomTrigger, insideTrigger, outsideTrigger. In CTF and DnD, add a triggerTeam datafield to the insideTrigger and outsideTrigger. You don't need to add the inRoomTrigger in CTF. Also, don't bother adding the inside/outside triggers in CTF for small bases. 

[All] - Add KillBotTrigger to kill any bot stepping into the trigger. Use this where bots shouldn't go. 

[CTF, CnH, Siege, DnD] - Add dangerTrigger and safeTrigger to make bots walk slower in tall and narrow places or near dangerous areas. In places where bots get stuck, add DumbBOT triggers and a datafield called setPosition, where you'd write a position the bot would be teleported to. In Siege only, add deathTrigger to kill Defense bots entering Offense base.


	Priority (24)
[All] - Keep testing the map until you're sure everything works properly.


	Priority (25)
[All] - Remove the current map with the NONE gametype from the prefs\EZ_Rotation.cs file. Remove the NONE word from the MissionTypes line at the beginning of the .mis file for the current map. Search for the word nameTag in the .mis file and see if any weird words or characters have been added to the nameTag variable, then remove those words if so, as this bug can happen sometimes. Aaaand, you're done! Congratulations.